<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * [支付宝客户端支付]
 * @author fans
 * @date 2016-8-22
 **/
class Payment_calipay extends CI_Driver 
{
	
	protected $CI = '';
	/**
	 * 
	 * @author fans
	 * @date 2016-8-22
	 **/
	public function __construct()
	{
		$this->CI = & get_instance();
	}
	
	
	public function getOrderSign( $data ){
		
		require_once ( dirname(__FILE__) . "/payment_calipay/alipay.config.php");
		require_once ( dirname(__FILE__) . "/payment_calipay/lib/alipay_notify.class.php");
		require_once ( dirname(__FILE__) . "/payment_calipay/lib/alipay_rsa.function.php");
		require_once ( dirname(__FILE__) . "/payment_calipay/lib/alipay_core.function.php");
		
		//将post接收到的数组所有元素，按照“参数=参数值”的模式用“&”字符拼接成字符串。
		$dataStr = createLinkstring($data);

		//打印待签名字符串。工程目录下的log文件夹中的log.txt。
		//logResult($dataStr);

		//将待签名字符串使用私钥签名,且做urlencode. 注意：请求到支付宝只需要做一次urlencode.
		$rsa_sign = urlencode(rsaSign($dataStr, $alipay_config['private_key']));

		//把签名得到的sign和签名类型sign_type拼接在待签名字符串后面。
		//$dataStr = $dataStr.'&sign='.'"'.$rsa_sign.'"'.'&sign_type='.'"'.$alipay_config['sign_type'].'"';
		
		$data = array(
			'order_id'		=> $data['order_id'],
			'goods_name' 	=> $data['goods_name'],
			'order_amount'  => $data['order_amount'],
			'sign'			=> $rsa_sign,
			'sign_type'		=> $alipay_config['sign_type'],
			'alipay_key' 	=> CLIENT_ALIPAY_KEY,
			'notify_url'	=> config_item('base_url').'/order/alipay_notify'
		);

		//返回给客户端,建议在客户端使用私钥对应的公钥做一次验签，保证不是他人传输。
		return $data;
		
	}
	
	
	/**
	 * 支付宝异步操作
	 * @author fans
	 * @date 2016-8-22
	 **/
	public function notify()
	{
		// 1.调用支付宝插件
		$alipay_config = array();
		require_once ( dirname(__FILE__) . "/payment_calipay/alipay.config.php");
		include_once  dirname(__FILE__) .'/payment_calipay/lib/alipay_notify.class.php';
		
		
		// 2.计算得出通知验证结果
		$alipayNotify = new AlipayNotify($alipay_config);
		$verify_result = $alipayNotify->verifyNotify();
		
		// 3.记录日志
		//log_message('debug', 'alipayCallback_POST:'.var_dump($_POST , true) );
		Logs::pay('alipayCallback_POST:'.$verify_result);
		
		//校验
		if($verify_result) 
		{	//验证成功
			///////////////////////////////////////////////////
			//请在这里加上商户的业务逻辑程序代
			//——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
	
			//获取支付宝的通知返回参数，可参考技术文档中服务器异步通知参数列表
			$out_trade_no = $_POST['out_trade_no'];

			//支付宝交易号
			$trade_no = $_POST['trade_no'];

			//交易状态
			$trade_status = $_POST['trade_status'];

			if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS'){

				//订单号
				$result['order_sn'] = $_POST['out_trade_no'];

				//支付宝交易号
				$result['alipay_trade_no'] = $_POST['trade_no'];

				//返回方式
				$result['callback'] = 'notify';

				//交易状态
				$result['trade_status'] = $_POST['trade_status'];
				
				//支付时间
				$result['gmt_payment'] = $_POST['gmt_payment'];
				
				return $result;		
			}

			//——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
		        
			//echo "success";		//请不要修改或删除
			
			/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


		}
		else
		{
			//log_message('error', 'alipay notify verify_result error');
			return false;
		}
	}
}

/* End of file Cache_memcached.php */
/* Location: ./system/libraries/Cache/drivers/Cache_memcached.php */